﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using JPSOFTWARE.BON.Modelos;
using JPSOFTWARE.BON.Repositorio;
using System.Web;
using System.Net.Mail;
using Modelos;

namespace JPSOFTWARE.BON.Regra
{
    public class RnUsuario : RnBase
    {
        public Retorno RegistrarLogin(UsuarioRegistrarModel registrarUsuario)
        {
            Retorno retorno = new Retorno();
            retorno.Sucesso = false;
            try
            {
                if (!ValidarEmail(registrarUsuario.Email)) { retorno.Sucesso = false; retorno.Mensagem = string.Format(Mensagens.MSG_003, "E-mail", registrarUsuario.Email); return retorno; }                

                if (!Repositorio.FabricaRepositorio.RepositorioUsuario().VerificaSeExisteEmail(registrarUsuario.Email))
                {                    
                    retorno.Sucesso = FabricaRepositorio.RepositorioUsuario().RegistrarUsuario(registrarUsuario);

                    FabricaRepositorio.RepositorioUsuario().VerificaSePrimeiroRegistro();

                    if (retorno.Sucesso)
                    {
                        retorno.Sucesso = true;
                        retorno.Mensagem = Mensagens.MSG_005;
                    }
                    else
                    {
                        retorno.Sucesso = false;
                        retorno.Mensagem = Mensagens.MSG_006;
                    }
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_016;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public List<UsuarioView> ListarUsuarioView(int IdUsuario)
        {
            Retorno retorno = new Retorno();
            List<UsuarioView> lista = new List<UsuarioView>();
            ValidarId(IdUsuario);
            try
            {
                lista = FabricaRepositorio.RepositorioUsuario().ListarUsuarioView(IdUsuario);

                //foreach (var i in lista)
                //{
                //    i.Telefone = FormataString("(##)####-####", i.Telefone);
                //    i.Celular = FormataString("(##)####-####", i.Celular);
                //}

                if (lista.Count < 0)
                {
                    retorno.Mensagem = "Não existe usuários cadastrados no sistema.";
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = Mensagens.MSG_006;
                throw ex;
            }
            return lista;
        }

        public Retorno VerificaSeExisteEmail(string email)
        {
            Retorno retorno = new Retorno();

            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioUsuario().VerificaSeExisteEmail(email);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_016;
                }
                else
                {
                    retorno.Sucesso = false;
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = Mensagens.MSG_006;
                retorno.Sucesso = false;
                throw ex;
            }
            return retorno;
        }

        public UsuarioEditarModel EditarUsuario(int IdUsuario)
        {
            UsuarioEditarModel editarModel = new UsuarioEditarModel();
            ValidarId(IdUsuario);

            try
            {
                editarModel = FabricaRepositorio.RepositorioUsuario().EditarUsuario(IdUsuario);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return editarModel;
        }

        public Retorno EditarUsuario(UsuarioEditarModel editarModel)
        {
            Retorno retorno = new Retorno();

            ValidarId(editarModel.IdUsuario);

            //editarModel.Cpf = LimparMascara(editarModel.Cpf);
            //editarModel.Telefone = LimparMascara(editarModel.Telefone);
            //editarModel.Celular = LimparMascara(editarModel.Celular);

            if (!ValidarEmail(editarModel.Email)) { retorno.Sucesso = false; retorno.Mensagem = string.Format(Mensagens.MSG_003, "E-mail", editarModel.Email); return retorno; }
            //if (!ValidaCPF(editarModel.Cpf)) { retorno.Mensagem = string.Format(Mensagens.MSG_003, "CPF", editarModel.Cpf); return retorno; }

            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioUsuario().EditarUsuario(editarModel);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = Mensagens.MSG_005;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = Mensagens.MSG_006;
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public Retorno VerificarSenhaUsuario(int IdUsuario, string senhaUsuario)
        {
            Retorno retorno = new Retorno();

            ValidarId(IdUsuario);

            try
            {
                retorno.Sucesso = FabricaRepositorio.RepositorioUsuario().VerificarSenhaUsuario(IdUsuario, senhaUsuario);

                if (retorno.Sucesso)
                {
                    retorno.Mensagem = "Senha não corresponde a senha atual. Digite sua senha.";
                }
                else
                {
                    retorno.Sucesso = false;
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = Mensagens.MSG_006;
                retorno.Sucesso = false;
                throw ex;
            }
            return retorno;
        }

        public Retorno DistribuidoraPorUsuario(int IdUsuario)
        {
            Retorno retorno = new Retorno();
            try
            {
                var dados = FabricaRepositorio.RepositorioUsuario().DistribuidoraPorUsuario(IdUsuario);

                if (dados != null)
                {
                    retorno.Sucesso = true;
                    retorno.Objeto = dados;
                }
                else
                {
                    retorno.Sucesso = false;
                    retorno.Mensagem = "Não existe distribuidora cadastrada para este usuário.";
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return retorno;
        }

        public List<UsuarioView> ListarUsuariosView()
        {
            Retorno retorno = new Retorno();
            List<UsuarioView> lista = new List<UsuarioView>();            
            try
            {
                lista = FabricaRepositorio.RepositorioUsuario().ListarUsuariosView();

                //foreach (var i in lista)
                //{
                //    i.Telefone = FormataString("(##)####-####", i.Telefone);
                //    i.Celular = FormataString("(##)####-####", i.Celular);
                //}

                if (lista.Count < 0)
                {
                    retorno.Mensagem = "Não existe usuários cadastrados no sistema.";
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = Mensagens.MSG_006;
                throw ex;
            }
            return lista;
        }

        public List<UsuarioView> ListarUsuariosAdministradorView()
        {
            Retorno retorno = new Retorno();
            List<UsuarioView> lista = new List<UsuarioView>();
            try
            {
                lista = FabricaRepositorio.RepositorioUsuario().ListarUsuariosAdministradorView();

                if (lista.Count < 0)
                {
                    retorno.Mensagem = "Não existe usuários cadastrados no sistema.";
                }
            }
            catch (Exception ex)
            {
                retorno.Mensagem = Mensagens.MSG_006;
                throw ex;
            }
            return lista;
        }
    }
}
